package com.bjpowernode.result;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * Web层统一用R对象返回
 *
 * 让web层返回给前端的数据字段是统一的，都是：code、msg、data三个字段
 *
 */
@Builder //用于链式编程创建对象
@AllArgsConstructor //生成带有所有参数的构造方法
@NoArgsConstructor //生成没有参数的构造方法
@Data //生成set、get、equal、hashCode、toString...方法
public class R {

    //返回的结果码（200是成功，500是失败）
    private int code;

    //返回结果信息（登录账号不存在，数据库操作失败.....）
    private String msg;

    //返回的结果数据（user对象，List<Clue>，100数字，true结果....）
    private Object data;

    public static R OK() {
        return R.builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).build();
    }

    public static R OK(Object data) {
        return R.builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).data(data).build();
    }

    public static R FAIL() {
        return R.builder().code(CodeEnum.FAIL.getCode()).msg(CodeEnum.FAIL.getMsg()).build();
    }

    public static R FAIL(String msg) {
        return R.builder().code(CodeEnum.FAIL.getCode()).msg(msg).build();
    }

    public static R FAIL(CodeEnum codeEnum) {
        return R.builder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build();
    }

    public static void main(String[] args) {
        R result = R.builder() //拿到构建器
                .code(200) //构建code字段的数据
                .msg("登录成功") //构建msg字段的数据
                .data("123456") //构建data字段的数据
                .build(); //构建一下，得到最终的R对象

        R ok = R.OK();
        System.out.println(ok);

        R ok2 = R.OK("sdjfsdfj");
        System.out.println(ok2);

        R ok3 = R.FAIL("数据库异常");
        System.out.println(ok3);

        R ok4 = R.FAIL();
        System.out.println(ok4);

        R ok5 = R.FAIL(CodeEnum.LOGIN_ACT_NONE_EXIST);
        System.out.println(ok5);
    }
}
